package com.studyyang.casedemo;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.studyyang.utils.constant.RabbitMqConstant;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

/**
 * @Author yangjin
 * @Description
 * @Date 2021/10/27/23:17
 **/
public class ProducerCase {

    public static void main(String[] args) throws IOException, TimeoutException {
        //String QUEUE_NAME = "helloworld";
        //ConnectionFactory用于创建MQ的物理连接
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("81.70.239.179");
        factory.setPort(5672);
        factory.setUsername("admin");
        factory.setPassword("admin");
        factory.setVirtualHost("admin");
        //创建TCP的物理连接
        Connection tcpConn = factory.newConnection();
        //创建信道Channel，即为tcp连接当中的虚拟连接，信道之间互不干扰（若频繁创建TCP连接，耗费资源）
        Channel channel = tcpConn.createChannel();
        /**
         * queueDeclare:声明并创建队列（有则加载，无则创建）
         * 五个参数：
         * 1、队列名称
         * 2、是否持久化：true-是、false-否
         * 3、是否私有化：true-只有第一次拥有该队列的消费才可访问、false-所有消费者都可以访问该队列
         * 4、是否自动删除：true-连接断开之后自动删除该队列、false-反之不删除
         * 5、其它额外的参数：null
         */
        channel.queueDeclare(RabbitMqConstant.CASE_DEMO_QUEUE_HELLOWORLD,false,false,false,null);
        String message = "hello,RabbitMQ!";
        /**
         * basicPublish：发布消息
         * 四个参数：
         * 1、交换机（暂时不用）
         * 2、队列名称
         * 3、其他参数
         * 4、消息的字节数组
         */
        channel.basicPublish("",RabbitMqConstant.CASE_DEMO_QUEUE_HELLOWORLD,null,message.getBytes(StandardCharsets.UTF_8));
        //关闭信道和tcp连接
        channel.close();
        tcpConn.close();
        System.out.println("信息发送成功！");
    }
}
